﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BLLMagiPack.Managers;
using ModeloMagiPack.Entidades;

namespace MaGiPack
{
    public partial class FrmProveedores : Form
    {
        Proveedor _miProveedor;
        Acciones _accionActual;
        ControlesDomicilio _controlDomicilio;

        public FrmProveedores()
        {
            InitializeComponent();
            _controlDomicilio = new ControlesDomicilio(cboProvincia, cboLocalidad);

            _accionActual = Acciones.alta;
            SeleccionarAccion();
            txtCuit.KeyPress += Utilidades.TextboxSoloNumeros_KeyPress;

            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
        }


        public Proveedor ProveedorSeleccionado 
        {
            get
            {
                Proveedor seleccionado = null;

                if (dgvProveedores.SelectedRows.Count > 0)
                {
                    seleccionado = new Proveedor();
                    seleccionado.IdProveedor = (int) dgvProveedores.SelectedRows[0].Cells["IdProveedor"].Value;

                    BLLProveedor bllProveedor = new BLLProveedor();
                    seleccionado = bllProveedor.TraerProveedor(seleccionado.IdProveedor);
                }

                return seleccionado;
            }
        }

        void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            MessageBox.Show(e.Exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }


        private void CargarDatosSeleccionados()
        {
            BLLLocalidad bllLocalidad = new BLLLocalidad();
            DataGridViewRow filaSeleccionada;

            if (dgvProveedores.SelectedRows.Count > 0 && _accionActual != Acciones.alta)
            {
                filaSeleccionada = dgvProveedores.SelectedRows[0];

                _miProveedor = ProveedorSeleccionado;

                txtRazonSocial.Text = _miProveedor.RazonSocial;
                txtDomicilio.Text = _miProveedor.Domicilio;
                txtEmail.Text = _miProveedor.Fax;
                txtTelefono.Text = _miProveedor.Telefono;
                txtCuit.Text = _miProveedor.Cuit;

                Localidad l = bllLocalidad.TraerLocalidad(_miProveedor.IdLocalidad);
                cboProvincia.SelectedIndex = l.Provincia;
                cboLocalidad.Text = l.Nombre;
            }
        }

        private void CargarGrilla()
        {
            BLLProveedor bllProveedor = new BLLProveedor();
            BLLLocalidad bllLocalidad = new BLLLocalidad();

            dgvProveedores.DataSource = (from p in bllProveedor.TraerProveedores(txtBuscar.Text)
                                         select new { IdProveedor = p.IdProveedor, RazonSocial = p.RazonSocial, Domicilio = p.Domicilio, Localidad = bllLocalidad.TraerLocalidad(p.IdLocalidad).Nombre, 
                                                      IdLocalidad = p.IdLocalidad, Telefono = p.Telefono, Fax = p.Fax, Cuit = p.Cuit }).ToList();
        }

        private void CargarLocalidades()
        {
            BLLLocalidad bllLocalidad = new BLLLocalidad();

            cboLocalidad.Items.Clear();
            cboLocalidad.Items.Add("-- Seleccione Localidad --");

            if (cboProvincia.SelectedIndex < 1)
                foreach (Localidad locActual in bllLocalidad.TraerLocalidades().OrderBy(l => l.Nombre))
                    cboLocalidad.Items.Add(locActual);
            else
            {
                Provincias p = (Provincias)Enum.Parse(typeof(Provincias), cboProvincia.SelectedItem.ToString().Replace(" ", "_"));

                foreach (Localidad locActual in bllLocalidad.TraerLocalidades(p).OrderBy(l => l.Nombre))
                    cboLocalidad.Items.Add(locActual);
            }

            cboLocalidad.SelectedIndex = 0;
        }

        private void CargarProvincia()
        {
            cboProvincia.Items.Clear();
            cboProvincia.Items.Add("-- Seleccione Provincia --");

            foreach (string prov in Enum.GetNames(typeof(Provincias)))
                cboProvincia.Items.Add(prov.Replace("_", " "));

            cboProvincia.SelectedIndex = 0;
        }

        private void SeleccionarAccion()
        {
            switch (_accionActual)
            {
                case Acciones.alta:
                    this.Text = "Nuevo Proveedor";
                    //btnGuardar.Text = "Guardar nuevo";
                    btnAgregar.Enabled = false;
                    btnEditar.Enabled = true;
                    btnRemover.Enabled = true;

                    txtCuit.Enabled = true;
                    txtEmail.Enabled = true;
                    txtTelefono.Enabled = true;
                    txtDomicilio.Enabled = true;
                    txtRazonSocial.Enabled = true;
                    cboLocalidad.Enabled = true;
                    cboProvincia.Enabled = true;
                    _miProveedor = new Proveedor();
                    break;

                case Acciones.modificacion:
                    this.Text = "Modificar Proveedor";
                    //btnGuardar.Text = "Guardar cambios";
                    btnEditar.Enabled = false;
                    btnRemover.Enabled = true;
                    btnAgregar.Enabled = true;

                    txtCuit.Enabled = true;
                    txtEmail.Enabled = true;
                    txtTelefono.Enabled = true;
                    txtDomicilio.Enabled = true;
                    txtRazonSocial.Enabled = true;
                    cboLocalidad.Enabled = true;
                    cboProvincia.Enabled = true;
                    break;
                default:
                    break;
            }
        }

        private bool ValidarDatos()
        {
            bool estaOK = false;
            Utilidades.LimpiarErrores(this, errorProveedores);
            estaOK = Utilidades.ValidarDatos(this, errorProveedores);
            return estaOK;
        }

        
        private void btnAgregar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.alta;
            SeleccionarAccion();

            Utilidades.LimpiarControles(pnlDatos);
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.modificacion;
            CargarDatosSeleccionados();
            SeleccionarAccion();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            BLLProveedor bllProveedor = new BLLProveedor();

            try
            {
                if (ValidarDatos())
                {
                    _miProveedor.RazonSocial = txtRazonSocial.Text;
                    _miProveedor.Fax = txtEmail.Text;
                    _miProveedor.Domicilio = txtDomicilio.Text;
                    _miProveedor.Cuit = txtCuit.Text;
                    _miProveedor.Telefono = txtTelefono.Text;
                    _miProveedor.IdLocalidad = ((Localidad)cboLocalidad.SelectedItem).IdLocalidad;

                    switch (_accionActual)
                    {
                        case Acciones.alta:
                            bllProveedor.CrearProveedor(_miProveedor);
                            Utilidades.LimpiarControles(pnlDatos);
                            break;
                        case Acciones.modificacion:
                            bllProveedor.ModificarProveedor(_miProveedor);
                            break;
                        default:
                            break;
                    }

                    MessageBox.Show("¡Su operación se completó con éxito!", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    CargarGrilla();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnLocalidad_Click(object sender, EventArgs e)
        {
            FrmLocalidad frmLocalidad = new FrmLocalidad();
            frmLocalidad.ShowDialog();
            CargarLocalidades();
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            Proveedor prov = ProveedorSeleccionado;

            if (MessageBox.Show(string.Format("¿Eliminar proveedor {0}?", prov.RazonSocial), "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                BLLProveedor bllProveedor = new BLLProveedor();
                bllProveedor.EliminarProveedor(prov);
                CargarGrilla();
            }
        }

        private void dgvPersonas_SelectionChanged(object sender, EventArgs e)
        {
            CargarDatosSeleccionados();
            btnRemover.Enabled = btnEditar.Enabled = dgvProveedores.SelectedRows.Count > 0;
        }

        private void FrmProveedores_Load(object sender, EventArgs e)
        {
            _controlDomicilio.CargarLocalidades();
            _controlDomicilio.CargarProvincias();
            cboProvincia.SelectedIndex = 0;
            CargarGrilla();
        }
    }
}

